package com.expert.miniapp.dao;

import com.expert.miniapp.dto.CaseDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * CaseMapper - 案例数据访问接口
 *
 * @author System
 * @since 2025-10-19
 */
@Mapper
public interface CaseMapper {

    /**
     * 查询所有案例（包含关联的用户和资源信息）
     * 用于分页查询
     *
     * @return 案例DTO列表
     */
    List<CaseDTO> findAllCasesWithDetails();

    /**
     * 根据ID查询单个案例详情（包含关联的用户和资源信息）
     *
     * @param caseId 案例ID
     * @return 案例DTO对象
     */
    CaseDTO findCaseDetailById(@Param("caseId") String caseId);

    /**
     * 根据主键查询案例基本信息
     *
     * @param caseId 案例ID
     * @return 案例实体对象
     */
    Case selectByPrimaryKey(String caseId);

    /**
     * 查询所有案例基本信息
     *
     * @return 案例实体列表
     */
    List<Case> selectAll();

    /**
     * 插入新案例
     *
     * @param caseEntity 案例实体对象
     * @return 影响行数
     */
    int insert(Case caseEntity);

    /**
     * 根据推荐项ID查询案例（用于重复检查）
     *
     * @param itemId 推荐项ID
     * @return 案例实体对象，如果不存在则返回null
     */
    Case findByItemId(@Param("itemId") String itemId);

    /**
     * 获取当前最大num值
     *
     * @return 最大num值，如果表为空则返回null
     */
    Integer getMaxNum();
}
